import { requestClient } from './request';

// 定义文件元数据的类型
interface FileMetadata {
  name: string;
  url: string;
}

// 上传文件的 API
export const uploadFile = async (file: File): Promise<FileMetadata> => {
  const formData = new FormData();
  formData.append('file', file);

  try {
    // 使用 requestClient 发送 POST 请求上传文件
    const response = await requestClient.post('/api/upload', formData, {
      headers: {
        'Content-Type': 'multipart/form-data',
      },
    });

    // 假设服务器返回文件的 URL
    return {
      name: file.name,
      url: response.url, // 根据实际返回数据结构调整
    };
  } catch (error) {
    console.error('文件上传失败:', error);
    throw error;
  }
};

// 获取文件列表的 API
export const getFileList = async (): Promise<FileMetadata[]> => {
  try {
    // 使用 requestClient 发送 GET 请求获取文件列表
    const response = await requestClient.get('/api/files');
    return response.files; // 根据实际返回数据结构调整
  } catch (error) {
    console.error('获取文件列表失败:', error);
    throw error;
  }
};

// 获取模型配置的 API
export const getModels = async () => {
  try {
    const response = await requestClient.get('/models');
    return response; // 返回模型数据
  } catch (error) {
    console.error('获取模型失败:', error);
    throw error;
  }
};

// 图片预测请求
export const predictImage = async (formData) => {
  return requestClient.post('/predict/image', formData, {
    headers: {
      'Content-Type': 'multipart/form-data',
    },
  });
};

// 视频预测请求
export const predictVideo = async (formData) => {
  return requestClient.post('/predict/video', formData, {
    headers: {
      'Content-Type': 'multipart/form-data',
    },
  });
};

// 摄像头预测请求
export const predictCamera = async (formData) => {
  return requestClient.post('/predict/camera', formData, {
    headers: {
      'Content-Type': 'multipart/form-data',
    },
  });
};
